﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TVL;
using System.Xml;
using General;

namespace TVLL5A
{
    public class ArmaL5A:Objeto
    {
        public ArmaL5A()
        {
            _tipo = "";
            _tirada = "";
        }

        public ArmaL5A(string ruta)
        {
            this.cargar(ruta);
        }

        public ArmaL5A(XmlElement nodo)
        {
            _fallo = "No";
            this.cargar(nodo);
        }

        private string _rutaxsd = "../../../TVLL5A/ArmaL5A.xsd";
        private string _tirada;
        public string Tirada
        {
            get { return this._tirada; }
            set { this._tirada = value; }
        }

        private string _tipo;
        public string Tipo
        {
            get { return this._tipo; }
            set { this._tipo = value; }
        }

        public override void toXTVL(XmlTextWriter mixml)
        {
            mixml.WriteStartElement("objeto");
            mixml.WriteElementString("nombre", this.Nombre);
            mixml.WriteElementString("peso", this.Peso.ToString());
            mixml.WriteElementString("tamanyo", this.Tamanyo);
            mixml.WriteElementString("desc", this.Descripcion);
            mixml.WriteElementString("cantidad", this.Cantidad.ToString());
            mixml.WriteStartElement("posiciones");
            for (int i = 0; i < this.LPosiciones.Count; i++)
            {
                mixml.WriteElementString("posicion", this.LPosiciones[i].ToString());
            }
            mixml.WriteEndElement();
            mixml.WriteStartElement("arma");
            mixml.WriteAttributeString("tipo", this.Tipo);
            mixml.WriteElementString("tirada", this.Tirada);
            mixml.WriteEndElement();
            mixml.WriteEndElement();
        }

        public override bool guardar(string ruta)
        {
            XmlTextWriter mixml = new XmlTextWriter(ruta, System.Text.Encoding.UTF8);
            mixml.Formatting = System.Xml.Formatting.Indented;
            mixml.WriteStartDocument();
            this.toXTVL(mixml);
            mixml.WriteEndDocument();
            mixml.Close();
            XSDValidator validador = new XSDValidator(_rutaxsd, ruta);
            if (validador.validar())
            {
                return true;
            }
            else
            {
                if (System.IO.File.Exists(ruta))
                {
                    System.IO.File.Delete(ruta);
                }
                return false;
            }
        }

        public override bool cargar(string ruta)
        {
            XSDValidator validador = new XSDValidator(_rutaxsd, ruta);
            if (!validador.validar())
            {
                return false;
            }
            else
            {
                XmlDocument xtvl = new XmlDocument();
                xtvl.Load(ruta);
                XmlNodeList arma = xtvl.GetElementsByTagName("arma");
                XmlNodeList nombre = xtvl.GetElementsByTagName("nombre");
                XmlNodeList desc = xtvl.GetElementsByTagName("desc");
                XmlNodeList peso = xtvl.GetElementsByTagName("peso");
                XmlNodeList tamanyo = xtvl.GetElementsByTagName("tamanyo");
                XmlNodeList cant = xtvl.GetElementsByTagName("cantidad");
                XmlNodeList pos = xtvl.GetElementsByTagName("posiciones");
                XmlNodeList tirada = xtvl.GetElementsByTagName("tirada");
                foreach (XmlElement nodo in arma)
                {
                    Tipo = nodo.GetAttribute("tipo");
                }
                Nombre = nombre[0].InnerText;
                Descripcion = desc[0].InnerText;
                Peso = peso[0].InnerText;
                Tamanyo = tamanyo[0].InnerText;
                Tirada = tirada[0].InnerText;
                Cantidad = Convert.ToInt32(cant[0].InnerText);
                foreach (XmlElement spos in pos)
                {
                    XmlNodeList mipos = spos.GetElementsByTagName("posicion");
                    LPosiciones.Add(this.toPos(mipos[0].InnerText));
                }
                return true;
            }
        }

        public override bool cargar(XmlElement nodo)
        {
            try
            {
                XmlNodeList nombre = nodo.GetElementsByTagName("nombre");
                XmlNodeList desc = nodo.GetElementsByTagName("desc");
                XmlNodeList peso = nodo.GetElementsByTagName("peso");
                XmlNodeList tamanyo = nodo.GetElementsByTagName("tamanyo");
                XmlNodeList cant = nodo.GetElementsByTagName("cantidad");
                XmlNodeList pos = nodo.GetElementsByTagName("posiciones");
                XmlNodeList tirada = nodo.GetElementsByTagName("tirada");
                XmlNodeList arma = nodo.GetElementsByTagName("arma");
                Nombre = nombre[0].InnerText;
                Descripcion = desc[0].InnerText;
                Peso = peso[0].InnerText;
                Tamanyo = tamanyo[0].InnerText;
                Cantidad = Convert.ToInt32(cant[0].InnerText);
                foreach (XmlElement nod in arma)
                {
                    Tipo = nod.GetAttribute("tipo");
                }
                Tirada = tirada[0].InnerText;
                foreach (XmlElement spos in pos)
                {
                    XmlNodeList mipos = spos.GetElementsByTagName("posicion");
                    for (int i = 0; i < mipos.Count; i++)
                    {
                        LPosiciones.Add(this.toPos(mipos[i].InnerText));
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }
}
